perm filename E.ALS[UP,DOC]21 blob sn#188211 filedate 1975-11-20 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00025 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00004 00002	NEWS about E (newest news first).  (Index is on p. 3.)
C00020 00003	INDEX of commands.
C00022 00004	Abbreviations and explanation of E documentation.  Credits.
C00027 00005	General remarks.
C00033 00006	PAGE CHANGING commands.
C00038 00007	WINDOW and POINTER (ARROW) moving commands.
C00043 00008	LINE MARKING commands.
C00046 00009	LINE-EDIT commands.
C00057 00010	Attach and Copy commands: A C
C00066 00011	LINE-INSERT mode.
C00070 00012	Pitfalls and Hazards.
C00075 00013	SEARCH commands: F XFIND *
C00088 00014	SUBSTITUTION commands: \
C00098 00015	FILE-SWITCHING and text transfering commands: ε λ H ∃ ? 
C00108 00016	MARGIN CONTROL commands: XJUST XJFILL XCENTER XJOIN
C00119 00017	More MARGIN CONTROL commands: XALIGN XJLEFT XINDENT → ←
C00126 00018	Other EXTENDED commands: X<cmd>
C00135 00019	System commands to evoke E, SWITCHES for file switching.
C00141 00020	Using ETV from a TTY or IMLAC.
C00150 00021	PARENTHESIS finding/matching commands: ( ) ↔ XPAREN
C00166 00022	Automatic and manual BEEPING upon command completion: XBEEP
C00168 00023	Message handling partial-sign command: ∂<cmd> 0∂
C00177 00024	Defining and using MACROS: XDEFINE Y
C00189 00025	ETV files extended by other programs.
C00192 ENDMK
C⊗;
NEWS about E (newest news first).  (Index is on p. 3.)

∂11/20/75 -- The trailer line on the screen now reports two things on
the right.  The first item is the number of records occupied by the page
on the disk (this is followed by the letter R).  The second item is either
a) the number of characters that can be added to the core version of
the page before rippling will be required (this number is preceded by
a - sign),
b) the number of extra characters that have been typed, over and
beyond the number that can be accomodated without rippling (this
number is preceded by a + sign),
Should the number that would otherwise appear exceed 640 then the second
item is either
c) the number of records of nulls that will appear on the disk if the
page in its present state is written out without XBURPing (this
number is followed by the letter B), or
d) the number of new records that will be created (with rippling)
when the page is written (this is followed by the letter X).

∂11/20/75 -- ETV files extended by other programs.
ETV can handle easily almost any file that has been extended by
another program even though the directory has not been updated by
that program.  The single restriction is that the file must remain in
correct ETV format with Formfeeds occurring only as the first
character in a record.  MAIL and RCV extend files ok.  See p. 25.

∂11/13/75 -- XSPOOL and XXSPOOL commands, if given when something is
attached, now spool only the ATTACH buffer instead of the rest of the
page as formerly.  If no attachment, entire page is spooled as usual.

∂11/11/75 -- Automatic directory updating for extended files.
If you edit with ETV a file that has been extended by some other
program, ETV will automatically update the directory.  However, the
updated directory will not be written out until some other page of
the file has been changed and is being written on the disk.  The
extended part of the file must be formatted correctly for ETV, which
simply means that any formfeeds found in that part of the file must
occur as the first character in a (200-word) record; otherwise, the
file must be reformatted and a new directory generated.  When a file
has been extended properly, ETV will say how many pages have been
added to the file, or if none, how many records have been added to
the last page.

∂10/28/75 -- ETV now permits lines containing up to 133 characters to be
transfered to the line editor for editing (the previous limit was 120).

In this context, characters are counted in a special way with each TAB
being counted as the display space which it occupies plus 2.

The line editor itself will allow the line to be augmentd until the
character count has reached 140 when it will activate, but such lines 
cannot be reentered.

Lines longer than these limits may be broken up by XJUST and XJFILL
commands.  Their lengths may be ascertained by the XLINCNT command.

∂10/17/75 -- Un-copy-attach bug fixed. 
An attempt to detach more lines than are in the ATTACH buffer no longer
causes trouble. The current line cursor may not be left where you expect
it to be but E does not blow up.

∂10/16/75 -- Bug fixed in macro calls.

∂10/15/75 -- Extra information on the trailer line.
The trailer line now shows, at the extreme right, the state of the
current page with regard to the space it occupies or will occupy when
stored on the disk.  Under normal conditions the number of records is
shown with the letter R.

When the X letter now appears on the header line this X is repeated on
the trailer line preceded by a number reporting the number of extra
records (of 128 words each) that will be required.

If, on the other hand, the page now contains or will contain at least
one complete record of nulls, this fact is reported by the letter B (for
bloat) and the number of such records.  The command XBURP permits one
to store the corrected page with these superfluous records deleted.  As
always, these superfluous records are not deleted when the page is
stored by the . command, by changing pages, by file switching or by the
E command.  See the second paragraph on p. 5.

∂10/9/75 -- Punctuation-at-end-of-line bug in XJUST command fixed.
Note that E assumes that a period at the end of a line is always
punctuation and that the user will want two spaces after it, when
it is moved to within a justified line.  Periods within a line are
assumed to be punctuation marks if they already have two spaces after
them, and the two spaces are preserved.  If only one space is used,
they are assumed to terminate an abbreviation and so only one space
will follow them in the justified text.  Exclamation marks and
question marks are treated the same as periods.

∂10/7/75 -- Macro defining and calling commands: ⊗XDEFINE ⊗Y.
E now has a very simple yet useful macro facility which saves the
user from having to type the same sequence of commands several times.
See p. 24. 

∂10/7/75 -- ⊗XBURP command causes RIPPLING to discard whole records
of nulls from the current page only.  Later this command may discard
whole records of nulls from all pages in one RIPPLING.

∂10/7/75 -- ⊗V improved on Data Disc displays.
αV now merely redraws the screen's text without erasing the screen
first.  αβV still erases the screen and then redraws the text.  Thus
αV is somewhat faster and sufficient for most cases. 

∂10/1/75 -- Partial-sign command ⊗∂<cmd> for handling message files.
To facilitate editing message files with E, there is now a
partial-sign search command which searches for lines beginning with
partial-signs.  This command, like the ⊗F search command, must be
followed by a second command which determines the action taken.  This
command is capable of attaching or deleting a whole page's text and
deleting the associated pagemark at the same time.  Soon MAIL will
write message files in E format.  See p. 23.

∂10/1/75 -- An annoying substitution bug causing ILL MEM REFs and
free storage errors has been fixed. 

∂9/75 -- ⊗XLINCNT now reports the length of the current line and the
number of characters on the current page in addition to the number of
the current line and the number of lines on the page.  The length of
the current line is in display columns, that is, tabs are counted as
the number of spaces they produce and the CRLF on the end of the line
is not counted. 

∂9/75 -- Window positioning has been improved.
Most commands that cause the arrow to move off screen will now
position the new window such that the arrow is in the middle. 

∂9/75 -- αβ<ff> now does ⊗-<ff>.
That is, ie, αβ<ff> moves back a window, even across page boundaries.

∂9/75 -- ⊗0⊗W and ⊗0⊗L now move half a window in the indicated direction.

∂9/75 -- Type ahead for line editor improved.
You can now type ahead all kinds of line editor commands and win
(including backspace and control digits).  Also, <bs> as a command to
move up a line works completely now, including on blank lines, and
can be typed ahead.  Of course, within the line editor, <bs> is still
a line editor command. 

∂9/75 -- Page number specifying in ⊗H and ⊗? commands.
The ⊗H (Home) and ⊗? commands now will take arguments to over-ride
the default values for the page number either as specified or if a
sign is used for a relative shift of page number by the specified
amount.  See p. 15.

∂8/75 -- Parenthesis finding/matching commands: ⊗( ⊗) ⊗↔ ⊗XPAREN.
See p. 21.

∂8/75 -- Automatic and manual beeping upon command completion: ⊗XBEEP.
See p. 22.

∂8/75 -- Editing a line with the line editor now does not set the
WRITE flag if the line was not changed.  Thus the line editor can be
used to examine lines without necessarily turning on the W at the top
of the screen. 

∂8/75 -- CONTINUEing after exit.
After exiting from E, the user can give the monitor command CONTINUE
to get back into E quickly at the same line and page from which the
command to exit was given. 

∂7/75 -- The ⊗; and ⊗: commands move straight up and down inside line editor.
The commands ⊗; and ⊗: do the same thing as ⊗↑ and ⊗↓ respectively,
except that instead of positioning you at the end of the new line,
they position you at the display column where you were when you gave
the command.  Thus these commands move you (inside the line editor)
straight up and down, except that if the display column is in the
middle of a tab on the new line, then you are positioned at the
beginning of that tab and if the display column is beyond the end of
the newly edited line, you are positioned at the end of that line. 

∂7/75 -- The α* and αβ* commands repeat the last search command given.
See p. 13.

∂7/75 -- α<cr> restores previous line editor line when typing filename.
When you get the message "Try again" after specifying a file name
with some error, it is now possible to invoke the <control><cr> line
editor command to recall what you had typed so that you need not type
everything over again. Most of the time this does not work but it
does here. 

∂7/75 -- Bug in formatting SOS files fixed.
A recent bug in formatting SOS files has been fixed. Users are still
advised to repage such files with the /F switch if this is a
reasonable thing to do. 

∂6/75 -- /F and /F/R modes break long pages up by inserting FFs.
See p. 19.

∂6/75 -- Unexpected errors encountered by E are now automatically recorded.
An FBI program reports most of the mal-functionings to ALS when you
get into trouble and you may hear from him for more details if he
thinks that he can do something for you (or vice versa).

∂6/75 -- The main timing problem on entering the line editor is fixed.
Now you can type ahead characters meant for the line editor without
waiting for the line editor to be set up after you have given a
command to edit a particular line.  The fix involved a system modification.

∂1975 -- Formerly fatal errors kludged around.
Some formerly fatal errors no longer cause E to HALT, although the
fix may not always work and E may crash later after all. 

∂1975 -- UDP files are remembered on file switching (maybe almost right).
INDEX of commands.

Read α as CONTROL, β as META, ⊗ as EITHER CONTROL OR BOTH CONTROL AND META
N=Normal, L=Line-insert, E=line-Edit, A=Attach, X=eXtend.
# stands for any decimal number

Command	 Meaning     in Mode	Page

⊗A	Attach 1 line	N		
⊗+⊗A	Add to A	A
⊗#⊗A	Attach # lines	A
⊗B	→ to Bottom	N,A
⊗C	copy		N
αD	Delete char	E
αβD	Delete line	N
⊗E	Exit		N,A
αF	Find string	N
αβF	Find word	N
⊗G	unused
⊗H	file Home	N
⊗I	enter Insert	E
⊗J	Jump window	N
αβK	Kill attach	A
⊗L	Last window	N
αM	to next Mark	N
αβM	Make Mark	N
⊗N	unused
⊗O	unused
⊗P	Page		N
⊗-⊗P	-Page		N
⊗Q	copy line	N
⊗R	Replace (att)	A
αS	Seek		E
⊗T	→ to Top	N
⊗U	Up window	N
⊗V	View		N
⊗W	Window down	N
⊗X	enter eXtend	N
⊗Y	unused
⊗Z	unused

⊗ε	file Enter	N
⊗λ	file Look	N
⊗∃	files exist	N
⊗0⊗∃	zero file list	N
⊗*	find repeat	N
⊗\	substitution
	     repeat	N

⊗?	Query E.ALS	N
α↑	_ up 1 to end	E,N
α↓	_ down to end	E,N
α;	_ up, same pos.	E,N
α:	_ down, same p.	E,N
⊗(	find (		E,N
⊗)	fnd matching )	E,N
Abbreviations and explanation of E documentation.  Credits.

This version of the E  manual is intended for on-line use  by the normal
user. It may be referenced at any time while editing another file simply
by typing a <CONTROL>? command. One may always return to  one's original
file by typing the <CONTROL>H command. 

   A  simplified form of  this manual  for the beginner  is available by
typing HELP ETEACH with a carriage return to the  system.  This copies a
file  named TEACH into  one's file area  and allows  one to read  it and
modify it for practice. 

   This is p. 4 of E.ALS[UP,DOC]   (see  the  top line with  asterisks). 
Page 1,  the "directory" page,  is automatically prepared  by E,  and in
this case has been planned to be of maximum  help to the user.  There is
also an Index of Commands on p. 3.

ABBREVIATIONS used in this manual and in TEACH to characterize commands.

   α     means hold the "CONTROL" key down while typing a character.
   β     means hold the "META" key down while typing a character.
   αβ    means hold both "CONTROL" and "META" keys down while typing.
   ⊗     means hold either the "CONTROL" key alone or both "CONTROL"
	   and "META" keys down while typing.
   Most commands are single characters with one or both of the two keys.

		Additional abbreviations
   <cr>    carriage RETURN key.			<lf>    LINE feed key.
   <tab>   TAB key.				<alt>   ALT-mode key.
   <bs>    Back-Space key.			<form>  FORM-feed key.
   <vt>    the VT key.				<clear>	the CLEAR key.
   CURRENT means the current line (normally with an → or ↔ on the left).


Credits.

   Dan Swinehart wrote TV,  the original  version of the display editor,
and created  the original version of TEACH.   Fred Wright wrote the FAIL
version of  TV  (called E).   Brian  Harvey  modified TEACH  to  reflect
differences  between E  AND  TV.   Arthur Samuel  and  Brian Harvey  are
responsible  for this  version.  Address all  comments and  questions to
Samuel, who is currently trying to fix a few  of the many remaining bugs
in E.

Disclaimer.

   An attempt has been made to present a coordinated view of E.  To this
end some simplications have  been made. The experienced user may develop
techniques that are not  described in this  manual. Any outright  errors
should, however, be called to our attention. 
   An earlier and more complete (but perhaps less  accurate) description
of E  features is available in the TV  manual,  TVED.DCS[S,DOC], and the
file TV2E.FW[UP,DOC] which describes how E differs from TV.
General remarks.

    E  is  a page  oriented  editor  designed  for use  with  a  display
terminal. It brings one page of the text into core, as requested, and it
displays a portion of this page as if through a window.  A  line pointer
and an underscoring  cursor mark the position in the  text where editing
is  to occur.   Special commands allow you  to go from  page to page, to
move the window up or down on the page and to move  the line pointer and
cursor as desired 

    A window  of text on the  screen is preceded by a  header line which
contains a row of  asterisks, (if the window starts at  the head of  the
page) and information as to the Page being viewed, the name of the file,
the  state of the file  (whether opened in  read only mode  or not), and
certain letters that indicate  the state of the editing.   If the window
starts at other than  the first line on the page, then the asterisks are
replaced with dots and the beginning line number is also displayed.

The window is followed  by a trailer line which reports  the line number
of the  last line shown in the window, the  total number of lines on the
page (if there are some still not shown), the page number  (repeated for
convenience),  the total  number of  pages in  the file,  then the  line
number at  which an arrow appears (its use will be explained later), and
finally information  as to the  state of  the page  with respect to  the
number of records that it currently occupies on th disk and will occupy.
The number of  current records is  followed by the  letter R. The  final
item may be either the number of characters shy (shown with a - sign) or
the numberof  characters in excess (shown with a  + sign) over the space
allotted. If this  number would exceed  640 (a full  record), it is  not
shown but it is replaced by the number of records followed by either the
letter B (for bloat) or X (for excess).

Extra records  indicated by  a "B"  on the  trailer line  will never  be
removed  automatically,  although  they  can  be  removed by  the  XBURP
command.  The trailer  line contains asterisks if  the last line of  the
page appears on the page and dots if it does not.

     E  does not  make a  separate disk  copy of  the file  being edited
unless  requested to do  so by the  use of a  special command (described
later), so take care  or you may damage  a file that belongs  to someone
else. 

    E achieves its speed (1) by using the system line editor and by only
changing the core copy of the text on the completion of a line edit, and
(2) by updating  the disk copy of the  page only on the completion  of a
page edit  (automatically effected by moving to  another page).  You can
undo an entire page of  incorrectly made modifications by cancelling  an
update, but unfortunately, you  can also lose an entire  page of desired
modifications  or additions if  the system should  go down unexpectedly.
Always remember that the text shown on the display may not, and usually
does not, mirror the true state of the actual text on the disk. 

    E is best understood by recognizing that it operates in a variety of
different modes and that  many commands are  appropiate only to  certain
modes. In fact some commands have quite different effects depending upon
the  mode that  E is  in at  the time that  the command  is given.   The
dominant mode is the NORMAL mode.  This allows for page, window and line
marker movement commands and commands which enter the other modes. 
PAGE CHANGING commands.

   PAGE-CHANGING commands are single characters typed with the CONTROL key
held down or with both the CONTROL and the META keys held down. They may
take modifiers as shown below.

   ⊗P       Go to the next PAGE.

   ⊗-⊗P     Back up to the previous page.

   ⊗+⊗7⊗P   Go foreward 7 pages if possible, otherwise to the last page.
   ⊗-⊗3⊗P   Go backward 3 pages if possible otherwise to the first page.

   ⊗7⊗P     Go to page 7 if possible otherwise to the last page.

   It is good practice to  limit the page size to less than  150  lines.
This eases the load on  the editor and makes the directory  of more use,
if you adopt the practice of starting each page with a suitable comment.
E  keeps certain vital statistics  packed into  9-bit bytes  and it gets
into trouble if there are more than 511 lines on any one page.

   You are now looking  at a longer page than before. Note two things:
1  The top line contains asterisks, the page number and the file name.
2  A bottom line contains dots, where formerly there were asterisks.

   The asterisks  mean that  you are  seeing the  page through a  window
starting at the top of the page, while the dots mean that there is yet
more on the page than that shown. On moving the window down, dots will
replace the top  asterisks. If you can  then see to the end  of the page
asterisks  will appear  at the  bottom.   Note also that  there are  some
lines at  the very  bottom that  echo  your command  or acknowledge  its
execution. Watch these lines to detect errors. 

   Several commands allow you to move the window up and down on the page
and to move the CURRENT line marker (the arrow on the left) around.

   Note that the window moved down on the page only far enough to get to
the end of the page. Had  the page been longer, an entirely new  window-
ful might have appeared (except for the former last line which now would
become the first line).

   The  →  which had previously been attached to the first line of text,
moved to  the last line  and stayed with  it as  the window moved.  This
arrow points  to a line called  CURRENT. This line would  be affected if
you were to do some line editing. More on this later.
WINDOW and POINTER (ARROW) moving commands.

These are Normal-mode commands.

   ⊗W     Advance the WINDOW,  that is, move the last line to the top.  If
	  there is less than a windowful left, move the window only enough
	  enough to see to the end.
  ⊗0⊗W	  Advance the window half way.

   ⊗L     Move the window up so that the first line becomes the LAST. This
	  is the reverse of ⊗W.
  ⊗0⊗L	  Do a half ⊗L.

 <form>   Do a ⊗W if there is more material on this page,  otherwise a ⊗P.
	  Note that no control keys are used.
	  Caution: be sure E is in the NORMAL mode before using.
 ⊗-<form> Do a ⊗L if not at the top of the page otherwise go to the last
	  full window on the next earlier page.
 αβ<form> The same as ⊗-<form>.

   <cr>   Move the "Current line" pointer down a line.
	  Note, no control keys used.
   ⊗>     Move the pointer down 4 lines. This takes the <top> key.
   ⊗≥     Move the pointer down 1/2 screen. This also takes the <top> key.

   <vt>   Move the "Current line"pointer up a line.
   ⊗<     Move the pointer up 4 lines. (Be sure to depress the <top> key).
   ⊗≤     move the pointer up 1/2 screen.

   ⊗T     Move the pointer up to the TOP line, adjusting the window to
	  show a few lines above this if possible.
   ⊗B     Move the pointer to the BOTTOM line, adjusting the window to
	  show a few more lines if possible.

   ⊗J     Move (JUMP) the window so that the CURRENT line is at the top.
   ⊗0⊗J   Move (JUMP) the window so that the CURRENT line is at the middle.
   ⊗-⊗J   Move (JUMP) the window so that the CURRENT line is at the bottom.

   ⊗3⊗J   Move (JUMP) the window so that the CURRENT line is 3 lines higher
	  in the window (with the top as the limit).
  ⊗-⊗7⊗J  Move (JUMP) the window so that the CURRENT line is 7 lines lower
	  in the window (with the bottom as the limit).

          Note that  the  default argument  for the  J  commands is,  in
          effect, infinity, with the argument 0 having a special meaning
          rather than being a NO-OP. 

   αβD    DELETE the entire CURRENT line.
	  This takes both α and β since αD has a different meaning.
	  Use with caution, the only way to undo a line deletion is
	  to cancel all corrections to the current page that have
	  been made since the last disk update.

   ⊗4αβD  Delete 4 lines starting with CURRENT.

   Two NORMAL-MODE commands that may be used to save an edited page are:

   ⊗.	  Write the current page (as corrected) into the disk file.
	  Note, this is done automatically with a change page command.
   ⊗E     Do a ⊗. and then EXIT to the system monitor.

   Most of the  NORMAL-MODE commands require the use of the  CONTROL key
and  perhaps the META key.  <cr>, <vt> and <form>  are exceptions.
LINE MARKING commands.

   E also provides the facility of marking up to 16 line locations with a
rapid way to return to these locations by using the following commands.
Marks are relative with respect to the line locations on the page but the
stored values are corrected for line insertions and deletions and for page
mark insertions and deletions so that the marks appear to be sticky. Marks
on lines that are attached or deleted are obliterated.
   At the present time, no attempt has been made to restore marks to their
proper position after a ⊗XCANCEL command as this would involve some extra
computations at the time of each page change which seems to be excessive.
   Marks are saved during ⊗ε, ⊗λ, ⊗? and ⊗H file-switching operations and
are restored on returning (by ⊗H or number) to a previously marked file.

   αβM	  Mark the CURRENT location,  recording  page number
	  and line number.

  αβ-αβM  Erase the MARK at CURRENT.

  αβ0αβM  Erase all MARKS.

   αM     Go to the next MARK (cyclicly).

   α-αM   Go to the previous MARK (cyclicly).

   α2αM   Go the the second Mark forward from here (cyclically).

  α-α3αM  Go the the third Mark before the current location (cyclically).
LINE-EDIT commands.

   E uses  the line-editing commands  that are  a part of  the operating
system.

   Typing a character without a CONTROL or META key will normally invoke
the  line editor  and the character  is typed  into the CURRENT  line. A
cursor will appear  under the first  character in the  line and in  that
position where  the next typed character  will go. A character  so typed
overwrites  the character that was at the  cursor's position.  E will be
in the LINE-EDIT mode.

   A word of caution- it is usually safe to  continue typing on entering
the LINE-EDIT mode without waiting  for the system to catch up. This can
fail, so look before giving a  carriage return and if anything is  amiss
type <alt> and start  over again. Strange things can happen.  Do not try
to save  a partially correct line for later  re-editing. You may have to
type <alt> more than once.

   When the  arrow  appears to  point at  the  bottom row  of  asterisks
(which, of course,  is not in the  text) E will accept  anything that is
typed  as an  added line of  text. The  asterisks temporarily dissappear
only to reappear below the  new line on the completion of  the addition,
and E reverts to the NORMAL mode.

   When in  the LINE-EDIT mode a  <cr> will terminate the  mode and move
CURRENT to the  next line.  A α<cr>  will terminate  the LINE-EDIT  mode
without moving CURRENT. Remember that the line corrections do not appear
in  the core image until  you issue one  of these commands  and that the
version on the disk  still does not show  your corrections until a  disk
update has been initiated. When in  this intermediate state the letter W
will  appear at the end of the title  line (with asterisks or dots at
the top of the window,  meaning that something is yet to be  written.

   If your change will  require the directory to be  changed,  this will
be shown by the letter D in this top line.  The letter X can also appear
if the change requires a in extension in the space  on the disk assigned
to the current page.  The letter X also appears on the trailer line with
a number specifying the number of extra records (of 128 words) that will
be required.  If no extra records are required this X is replaced by the
letter R following a number specifying the number of records that the page
occupies or will occupy on the disk.  After a deletion the letter B may
appear in place of this R or X, again preceded by a number that specifies
the number of all-null records that the page will contain.

   By the way,   window moving commands do not  automatically update the
disk, whereas page changing commands always do an update.

   Most  of the line editing  commands listed below will  also enter the
LINE-EDIT mode from the NORMAL mode.

   If you make a mistake and  perhaps lose some valuable information hit
<alt> rather than <cr> and your data will reappear as if by magic.

   Some useful line editing commands are:

   α<space>   Move the cursor  to the right 1 space.
   α4α<space> Move the cursor 4 spaces  to the  right.
   α<bs>      Move the cursor to  the left  1 space.
.  α5α<bs>    Move the cursor 5 spaces to the left.
   α<tab>     Move the cursor to the end  of the line.
   α<form>    Move the cursor to the start of the line.

   αS then <char>    Move the cursor to the next occurance of <char>.
   α3αS then <char>  Move the cursor to the 3rd next occurance of <char>.

   αD       DELETE a character and move the rest of the line to the
	    left.  If at the end of the line,  this will append the
	    next line to the current.  ETV will prevent this from
	    being done if the resulting line would be too long for
	    the line editor.
  β<bs>     Delete the character to the left of the cursor position.
  <bs>      BACK SPACE, deletes like β<bs> if at the end of the line,
	    otherwise just moves the cursor to the left like α<bs>.
  αK<char>  KILL the line starting with the cursor position up to but
	    not including the character typed. Do nothing if the no
	    such character is found.
  α4αK<char>  KILL the line up to the 4th occurrance of the character.
  β<char>   Make  room and  insert  <char>  ahead  of the  cursor
	    position.
  β<cr>     Insert a carriage  return and stay in LINE-EDIT  mode.
  β<vt>     DON'T, at least not until you know better, or until a bug
	    in E gets fixed.
  αI	    Enter INSERT  mode (like holding META down continuously).
	    Everything that  you type  (including carriage returns)
	    will be inserted until you type another line command.
	    Any LINE-EDIT command will cause one to leave the INSERT
	    mode, for example, the α<space> command.

  <cr>      Leave LINE-EDIT mode, accept the line and  move CURRENT down.
  α<cr>     Leave LINE-EDIT mode, accept the line, do not advance CURRENT.
  α<vt>     Leave LINE-EDIT mode, accept the line and move CURRENT up.

  <alt>     Restore the line to it original condition and leave the
	    LINE-EDIT mode.

  ⊗↑        Accept the line, then move to the end of the previous line.
  ⊗3⊗↑      Accept the line, then move to the end of the third previous
	    line.
  ⊗↓        Accept the line, then move to the end of the next line.
  ⊗6⊗↓      Accept the line, then move to the end of the sixth line
	    forward.

  ⊗;        Accept the line, then edit the previous line from the same
            display position as that from which this command was given.
  ⊗3⊗;      Accept the line, then edit the third previous line from the same
            display position as that from which this command was given.
  ⊗:        Accept the line, then edit the next line from the same
            display position as that from which this command was given.
  ⊗6⊗:      Accept the line, then edit the sixth line forward from the same
            display position as that from which this command was given.


    The above commands work in both NORMAL and LINE-EDIT modes.

    The following command works only in the NORMAL mode but since it
enters the LINE-EDIT mode it is best explained here.

  ⊗Q       Insert a copy of the line just above CURRENT and open it
	   for editing (i.e. enter LINE-EDIT mode).

   If you are  editing a line  and type something  that the line  editor
does  not understand it  will usually  ignore the error  (after thinking
about it for a moment) but don't bank on this too heavily because it can
fail.

   If you type a legal ⊗ command (some are forbidden) when in  LINE-EDIT
mode the line will be accepted as edited and the command will be carried
out.
  (Typing ⊗. in LINE-EDIT mode returns to LINE-EDIT mode automatically
without writing the page.)

   The α<cr> command, that works to recall a line from the system buffer
in the system's monitor mode, is replaced by the αQ command as described
above.
Attach and Copy commands: ⊗A ⊗C

   The ATTACH and COPY commands permit blocks of lines or copies of them
to be moved up and down on the page or from page to page, as desired.

   The ATTACH command removes one or more  contiguous lines of text from
the core  image of the page and places them  in a special attach buffer.
The lines are still displayed on the screen in their original position.

    Note that if more than 8  lines are attached, then only the first  4
lines and  the last 3 lines  are shown so that  one can see a  few lines
both  before and following the attached lines  to be certain as to their
relationship to the rest of  the page. The attached lines are  marked by
vertical bars (thus |) at the left.

    The apparent  position of the attached lines can  be made to move up
or down on the page or from  page to page with the usual  CURRENT-moving
commands to prepare for a final command  which will deposit the attached
lined  back into the core  image of the text  at the indicated position.
Perhaps this  can be made  clearer by  remarking that  the CURRENT  line
designation is  actually attached to  the line following the  section of
text that has been removed (although the → does not appear). What one is
actually doing when  one appears to be  moving the attached lines  is to
move CURRENT around and E  cleverly always displays the attach buffer on
the screen just above CURRENT, where it will in fact be put if one gives
the deposit-line command.

Basic commands.

  ⊗A     ATTACH the CURRENT line and mark it with a "|".
  ⊗3⊗A   ATTACH 3 lines starting with CURRENT and mark these with "|'s".
	 If a number greater than 8 is used, (for the 3 in the example),
	 only the first 4 and the last 3 lines are shown.  A row of dots
	 is used to indicate that some attached lines are not shown.

  ⊗E     Deposit the attached lines where displayed and Exit ATTACH mode.
	 Note:   this command has a different meaning when one is NOT in
	 the ATTACH mode (it then means EXIT from E). Don't stutter when
	 typing it. Give the system time to react.
  αβR    REPLACE the attached lines in their original location and leave
	 the ATTACH mode.  CAUTION, this does not work correctly if you have
	 switched files, so be careful.
  αβK    KILL the attached lines (they go away beyond recall) and exit
	 from the ATTACH mode. Note that αK does not work (for safety).

	 If you make a practice of using the CONTROL key only, when in
	 the ATTACH mode, (when it works) you will avoid the danger of
	 accidentally killing an attachment, if you mean to hit a J or
	 an L and hit a K instead.

  ⊗C     Make a COPY of the CURRENT line and ATTACH this copy.
  ⊗5⊗C   Make a COPY of 5 lines starting with CURRENT and ATTACH these.


Relative arguments.

  Relative-argument commands add or remove lines from the end of the
  attach buffer thus:

  ⊗+⊗A    Attach 1 more line beyond those already attached.
  ⊗+⊗3⊗A  Attach 3 more lines beyond those already attached.
  ⊗-⊗A    Detach 1 line from the end of those already attached.
  ⊗-⊗2⊗A  Detach 2 lines from the end of those already attached.

  ⊗+⊗C    Copy 1 more line beyond those already attached.
  ⊗+⊗4⊗C  Copy 4 more lines beyond those already attached.
  ⊗-⊗C    Delete (kill) 1 line from the end of the attached set.
  ⊗-⊗2⊗C  Delete (kill) 2 lines from the end of the attached set.

   If the apparent position of the attached lines have been moved before
these relative-argument  commands are given then additions and deletions
are made in terms of the apparent new location. This gets a bit hairy in
the case of  deletions but it is  a very useful device  for assembling a
set of copied lines from several different places.

   Note that a single attach command is only effective to the end of the
current page, and an attachment is deposited all on the same page.

   A word of  warning,  a hazard  is involved in using ⊗A  to move lines
from page  to page.  The attached lines can be lost if the system should
crash during the interval between the removal of the attached lines from
one page  and the final  updating of the  page to which  they are moved.
This hazard can be  avoided by copying  the lines rather than  attaching
them  and  then  going  back and  deleting  the  original  copy.    This
precaution is  hardly necessary for a  line or two but it  is a wise one
when you are moving large blocks of text.

   Moving lines from page to page takes time, so don't get impatient.

   This is a good place to comment on the RIPPLING report, that  you may
have noticed in the scratch-pad lines  at the bottom of the screen. This
notice  appears when a  major rearrangement of the  text between records
becomes necessary. This also takes time.
LINE-INSERT mode.

   While one can add text  at the bottom of a page by  simply moving the
CURRENT  marker  so  that it  appears  to  point at  the  bottom  row of
asterisks (not to dots),  a special mode is  used to insert lines  of
text at other points. As a matter  of fact it is usually better to enter
this special  LINE-INSERT mode if one is to type several lines even when
at the end of a page.

   When in the LINE-INSERT  mode, typing a carriage return,  inserts the
carriage return into  the text, writes the line into  the core image and
enters the LINE-EDIT mode for  the next line to  be typed. Care must  be
taken to leave the LINE-INSERT mode properly or else undesirable letters
may appear in your text.

   The fact that the editor is in the LINE-INSERT mode is signalled by a
double arrow CURRENT line marker ↔ in place of the right arrow →.

   To enter the LINE-INSERT mode:

  αβ<cr>  Enter LINE-INSERT mode, insert a blank line ahead of the text
	  at CURRENT and mark the new line with the double arrow ↔.  If
	  you are in the middle of a line, this will break the line into
	  two separate lines, with the  ↔  at the start of a blank line
	  between the two portions.
 	  This does something else, if you are already in LINE-INSERT
	    mode (see below).

   While in LINE-INSERT mode:

  <cr>    Accept the line and move the ↔ to a newly inserted blank line.

  α<cr>   Leave the LINE-INSERT mode and accept the line in question.

  αβ<cr>  Insert a blank line (if not in the middle of a line).   If you
	  are in the middle of a line, this will break the line into two
	  separate lines, and  position the cursor to be ready to accept
	  text at the end of the second portion.   At the present time a
	  a bug in E prevents the second portion from showing until the 
	  next <cr> has been typed, but it's there.

  α<vt>   Leave the LINE-INSERT mode but move the →  back to the line a-
	  head of the accepted line.

  <alt>   Accept the line up to the cursor but delete the rest and leave
	  the LINE-INSERT mode with the arrow pointing to the remaining
	  text or to the next line.
Pitfalls and Hazards.

    The great power  of E lies in its  many modes.  At the  same time, E
can also  be moody if one  tries to give it certain  commands when it is
not in the appropiate mode.  It can even get into a state where  it will
not listen to reason.  In fact,  you may easily lose much of your recent
editing.   So it may be well to review some of the pitfalls and hazzards
associated with its use.  These are of two types.

Errors of understanding.

   <cr> and <vt> are not inverse operations.

   Since  <cr> and <vt>  move CURRENT in the opposite direction  when in
NORMAL mode  one is tempted  to thing of  them as being,  in some sense,
inverse. They are not, for a number of reasons,  some having to do  with
system editor design.  Since the BACK-SPACE key now does everything that
the <vt> key does (this is a fairly recent change) it is wise to never
use the <vt> key at all.

   Certain commands are not acceptable when in the LINE-INSERT mode.

When in  the Line-Insert  mode, you  are talking  directly to the  Line-
Editor and many commands, particularly those with only the <CONTROL> and
not the <META> key used, may not leave the Line Editor properly with the
result that funny things can happen. When in this mode, use only regular
line-editing commands  and always exit with a command using both control
keys or  with the  <CONTROL><CR> command. Do  not try  to use  <CONTROL>
<VT>. 

Always use both  META and CONTROL keys  with any argument meant  for use
with  a command that  requires leaving the  line editor  even with those
non-line-editor commands which, themselves, do not use both keys. 

Errors of execution.

   The J,K and L keys can be mis-struck.

   Since the kill command is potentially dangerous, particularly the αβK
command,   one should take especial care in developing sane habits.  One
precaution is to adopt the practice of never using both CONTROL and META
keys for  the J and L  commands which work  the same whether or  not the
META key is used.
   There  is,  however,  a rather  good  reason for  not  adopting  this
practice  generally  particularly  when  in  the  LINE-EDIT  mode  since
commands with  the CONTROL key  only do not  always activate immediately
and there is therefore a distinct possibility  that initial part  of the
command will  be  gobbled by  the line  editor  if it  arrives when  the
program is  swapped out. This never seems  to happen with commands using
both the CONTROL and the META key.

   D and < are on the same key.

   The delete  command is also potentially dangerous,particularly in the
αβD form and even more so when an argument is used. If one  types αβ7αβD
when  one means  α7α< the  results can  be very  unpleasent, to  say the
least.  Here again if one never forms the  habit of using αβ< but always
uses  α< then a mistake in not using the <top> key will not be nearly so
painful.
SEARCH commands: ⊗F ⊗XFIND ⊗*

   The search can be specified in several different ways:

   1) The search can be for an alphameric  string that is separated from
the rest  of the text by non-alphameric characters or  it may be for any
string regardless of its surroundings. Note that no distinction  is made
between upper and  lower case. The FIND  command does not find  the very
first string on the line to which the cursor is pointing. 

   For single-page searches the commands are:

   αβFSmith<cr>   Find just plain Smith or smith but not this string in
		  in $smith, in blacksmith or in Smithsonian. Note that
		  % and _ are accepted as alphamerics.
   αFSmith<cr>    Find smith as an isolated word or as a part of a long-
		  er string (in blacksmith for example).  The string is 
		  no longer limited to alphamerics but use care because
		  there are still some bugs in E.

   Note that no space is used between the F and the start of the string.

   For multi-page search commands are:

   αβXF Smith<cr> Find a delimited string.
   αXF Smith<cr>  Find the string regardless of surroundings.

   Note that CONTROL  and META keys are not  used with the F and  that a
space is required  between the F and the string.  Commands starting with
the  letter X  are  EXTEND  commands which  permit  more than  a  single
character to be used  for the command name, hence the need for the space
to mark its end.  In this  case the complete command name is FIND,  but,
since there  are, at present, no  other commands beginning with  F, only
the F needs to be typed.
Multi-page searches, made on  files entered /N, are carried  only as far
as the core directory has been extended.  To search the entine file, one
should first extended the  directory by switching  to the last page  and
then switching back to the desired starting page.

   A string,  once specified, is sticky, that is  one need not retype the
string for a repeat of the command. The search string for a within-a-page
search is remembered independently from that for an EXTEND search.  For a
repeat one repeats the command up to the string itself and then types the
desired termination (a <CR> as shown above, or any termination listed be-
low).

   Special repeat  commands exist  which simplify  the repeated  search.
These  are easier  to  use than  the regular  repeat  command, described
above, but only the last exicuted type of FIND can be repeated.   Two of
the more  commonly used  terminations are  simulated by  using different
control keys with the * command symbol. 

     αβ*   Find the  next occurence of  the string  specified by the
  last FIND  command  (whether a  single page  FIND  or a  multipage
  XFIND).  Move the line cursor  to the found line  but do not enter
  the LINE EDITOR, that is, duplicate a normal FIND command  that is
  terminated  by a  <CR> only.   An  argument may  be used  (such as
  αβ1αβ3αβ*) to find the Nth occurence (the symbol ∞ counts as 510).

     α*    Find the  next occurence of  the string specified  by the
  last FIND  command  (whether a  single page  FIND  or a  multipage
  XFIND).   Leave the line in  the LINE EDITOR as it  would be for a
  normal FIND command  terminated by a  <CONTROL><CR>.  If  there is
  something  in the  ATTACH buffer,  this is  interpreted as an  αβ*
  command.  See below for method of using an argument. 

     αβ4α*    Find the fourth occurence of  the string specified  by
 the  last  executed  FIND command  (whether  a  single  page  or  a
 multipage XFIND) and  position the cursor under the first character
 of the found string (as it would be for a normal FIND  command that
 is terminated  by a  <CONTROL><CR>).   Note that  both control keys
 should  be used with the argument  to prevent interference troubles
 with the LINE EDITOR. This precaution is  particularly important if
 the  argument is typed  while the  last found line  is in  the LINE
 EDITOR. 

   2) The  following special symbols  may be used  in the  search string
with the  meanings noted. If  these characters  are desired as  ordinary
characters  in the  searched-for string  they must  be preceeded  by the
identity symbol ≡. 

  Symbol		Meaning

   ¬		The character that follows must not be in the string at
		this point but any other character will be accepted.
   |		Any deliminitor.
   ∀		Any character.
   ≡		The character that follows immediately after this symbol
		is not to be treated as a special symbol but it is to be
		included as a character in the searched-for string.
   ∞		Not at present implemented.
   ⊂		Not at present implemented.


   3) The action  that is to be  taken on the successful  termination of
the search  is specified by the delimiter  used to terminate the string.
The <cr>, used above,   moves the → to the  found line. A repeat of  the
Find command,  if given, will start  with this same line,  but after the
found string,, so that multiple occurances of a string within a line can
be found.

   Accepted action-defining delimiters are:

   <cr>     Move CURRENT to the found line or report failure.

   α<cr>    Terminate, as with <cr>, but  move the cursor until it is
	    under the first character of the string.   Note that this
	    leaves E in the LINE-EDIT mode. A second FIND command can
	    however be given and the next occurance will be found. If
	    a FIND command is terminated with <cr>, a α<cr> will still
	    move the cursor to the string.

   ⊗J       JUMP the line with the found string to the top of the
	    window.

   αβ<cr>   Enter the LINE-INSERT mode with the ↔ at a newly inserted
	    blank line ahead of the found line.

   αP       Make the search over the directory page  and then display
	    the referenced page with the line pointer at the top line.
		Note that one can give this command without having to
		give an explicit command  to go to the directory page.
		If the search fails the current location is unchanged.

   αβP      Make the search over the directory page  and then display
	    the  referenced page  with the line pointer at the second
	    occurance of the referenced string  (the first will be in
	    the first h}e of the page).

   ⊗A       ATTACH all lines starting with CURRENT up to and including
	    the line with the specified string.
	    If used with an EXTEND command and if the string is not on
	    the windowed page, the attachment will begin at the top of
	    the page on which the string is found.
	    Attachments do not cross page boundries.

   ⊗C       COPY all lines starting with CURRENT up to and including 
	    the line with the specified string.
	    See ⊗A above for restriction with an EXTEND command.

   αβD	    DELETE all lines beginning with CURRENT up to but not
	    including the line with the specified string.
	    See ⊗A above for EXTEND command restriction.
	    This is a very dangerous command so use it with caution.

   ⊗\       Terminate the searched-for string and prepare to accept a
            substitution string. The substitution string is then typed
	    in and may be terminated in any one of several ways.   For
	    details see String Substitution Commands on the next page.
	    Note that there is a special repeat command for this case so
	    do not try to use the repeat conventions that are used for
	    simple searches.

   <alt>    Abort the present command and cancel the string specification.

   4) The search can be for the first  occurance of the specified string
or for the n'th occurance.

   ⊗3⊗Fsmith<cr>  FIND the 3rd occurance of SMITH.

   5) The <ESC>I command will terminate any FIND in progress at the end of
the page on which it happens to be searching, and it will report this page
number. This command is not intended for use with a single page F command
and it may give an incorrect message in this case on the termination of a
normal search.
SUBSTITUTION commands: ⊗\

String substitution commands are initiated by first giving a normal FIND
command   but  using   the  special   string  terminating   character  \
(back-slash),  typed  with  both  the  <META>  and  the  <CONTROL>  keys
depressed.  This is then followed  by the substitution  string which, in
turn, is terminated  by either a  simple carriage  return (which may  be
preceeded by an argument, typed  with control keys) or by <CONTROL><CR>.
Note, many of the otherwise acceptable Find command terminations are not
meaningful with the substitution commands and are not allowed. 

Characters in the searched-for string that are  preceeded by the special
control symbols  ¬ and ≡ and all characters  that are represented by the
special symbol ∀ or by  the symbol |  (see p. 13 for the explanation  of
these symbols)  are treated as any  other character and are  deleted and
replaced  by the substitution string.   The "partial definition feature"
as implemented in SOS is not, at present available. 

Note. The FIND command does  not find the very first symbol  on the line
to which the cursor is pointing. 
   This limitation is of  little consequence for the simple  FIND but it
   is  an annoyance if one  wants to replace all  occurances of a symbol
   (or string) which happens to be the very first symbol (or  string) on
   a page.   One can introduce an  initial space into the  first line or
   one  can introduce  an initial  blank line  temporarily and  have the
   cursor at this line.  The space or line can then be removed after the
   substitution. 
In the rest of this write-up "all occurances" means "all except the very
first character or string on the line to which the cursor is pointing at
the time that the command is given". 


Sample commands.

   αβFSTRINGαβ\"String"αβ∞<CR>	Find all occurances of the string
                STRING,  whether typed  in  lower or  upper  case
                letters  and  replace  them  by the  substitution
                string as typed, that is, enclosed in  quotes and
                with the initial letter only  in CAPS.  Limit the
                search  to the current page starting at th cursor
                location. 

   αXFIND ←αβ\ <BACK ARROW> α<CR>	 Find the first occurance
                of the character  ←  whether on the  current page
                or a subsquent one and  replace it  by the string
                <BACK ARROW>  (including  the <  and >) and  with
                spaces   introduced   before  and   after   these
                characters.    Leave  the resulting  line  in the
                Line-Editor. 

The <CR> termination is the faster mode of operation in  that it makes a
minimum use  of the line editor  and it is recommended.   This mode does
have one defect in that the substitution is completed and is not subject
to the simple <ALT>  method of aborting a single line  correction.  When
the <CONTROL><CR>  termination is used the substitution  is made via the
Line-Editor and the results are left in the Line-Editor's buffer so that
the substitution may  still be aborted by the usual  <ALT> command. This
takes time and certain timing difficulties sometimes cause trouble. 

The usual  rules apply to the specification of the searched-for string. 
The substitution string may, however, contain certain delimiters (spaces
in particular) whether or not the search is for a delimited string and a
distinction is  made between  upper  and lower  case letters.  Only  the
searched-for letters without delimiters are replaced. To be specific, if
one  were to replace a  delimited string by a  null substitution string,
the two delimiters would remain in the corrected text. 

The substitution string is sticky, so that a substitution  command, when
successfully executed  for a single  occurance, may be repeated  for the
next  occurence by typing αβ\ only.  The typing of  a new string for the
searched-for  string  destroys  the  record  of   the  previously  saved
substitution string  and the entire request must  be retyped before this
command will be honored. 

A null substitution string may be  used but only after confirmation  has
been requested and received. The substitution will also be restricted to
a single occurance.  It may then be repeated as many times as desired by
the usual repeat command with the desired argument.    These precautions 
can be removed if users find them bothersome, but it was thought wise to
put them in at first.

Multi-page substitutions  are useful  but potentially  dangerous as  the
substitutions made on  any one page are, of course, written out onto the
disk file when ever a new page is entered. 

As noted earlier, typing αβ\ after a successful single substitution will
repeat the  substitution. This command  may be preceeded by  an argument
(with control  bits) and the substitution will be repeated the specified
number of times.  Should substitutions occur on more  than one page, all
substitutions on pages earlier than the last page will have been written
out. 

The use of the  command α\ rather  than αβ\ is also  allowed but is  not
recommended. This leaves  the altered line  in the line buffer  with the
possibility of an <ALT> abort. 

Sample repeat commands.

   αβ\		Repeat  the previously made substitution  at the next
                occurance of the searched-for string using the faster
                and  safer mode which  does not leave  the results in
                the Line-Editor buffer. 

   αβ6αβ\	Repeat the substitution for the next 6 occurances.

   α\		Repeat the substitution once but leave the results in
		the Line-Editor buffer.
FILE-SWITCHING and text transfering commands: ⊗ε ⊗λ ⊗H ⊗∃ ⊗? 

   The file switching  commands <CONTROL>ε and <CONTROL>λ  when followed
by the name of  another file name replace the existing file by the newly
specified one while  retaining the contents of  the ATTACH buffer,  thus
allowing one to copy  or move text from one file to  another file. The ε
command  (ENTER)  opens the  new  file in  read-write mode  while  the λ
command (LOOK) opens the file in read-only mode.

   As different  files are referenced,  each file  is assigned a  number
which  can be used thereafter  as an argument  to the ε or  λ command to
call the desired file without retyping its name.  When files  are called
by number they are positioned at the last referenced page and line.  Any
previously existing line marks are also restored. Switches are not  used
with number-referenced commands.  The command character itself activates
the command directly.

   The list  of files with their referencing numbers can be displayed as
a mnemonic aid by the command <CONTROL>∃.

   The usual switches (see p. 19) may be  used with  the file  switching
commands  when the  file name is  typed directly.  Some, but not  all of
these  switches  are  remembered  and  are  re-invoked  when  files  are
referenced by number. 

   The previously referenced  file (unless it  be the E-manual  file) is
considered to be the HOME file and can be recalled by typing <CONTROL>H. 
It is reentered  in its previous  read-write condition  and at the  last
referenced page  and line.   On  returning from  the E-manual  file (see
below)  the  home  file  conditions that  existed  before  going  to the
E-manual are reestablished, that is, if you had switched  from file A to
file B  then to the  E-manual, the first  H command would  return you to
file B and the next H command would take you back to file A.  Repeated H
commands thereafter would switch  you back and forth between  file A and
file B. 

   The HOME  command will accept  an argument  to over-ride the  default
argument  and return  either to the the specified  page  or if  a signed
argument is  typed to  a page  relatively located  with  respect to  the
earlier referenced page. 

   Finally it is possible to reference the E-manual file, E.ALS[UP,DOC],
by typing <CONTROL>? .   The first reference to  this manual will be  to
the directory page. Thereafter it is entered at the last referenced page
and line. One may, however, over-ride these default values  by typing an
argument to specify a particular page, or, by typing a signed  argument,
to specify a relative page number from the previously referenced page.

   Difficulties may  be experienced  in copying  and moving  information
from unformatted files  and from files without  directories particularly
if many lines are to be moved. Requests if files may be formatted should
be honored usually unless this is known to be undesirable.  ETV is smart
enough to detect most cases when one tries to format a binary file or an
XGP file and it will tell you this and give you another chance to say NO.
If one attempts to move information TO an unformatted file, the material
in the ATTACH buffer may be lost.

   Also do not try to use the <CONTROL>R  command when you have switched
files with  something in the ATTACH buffer or  the attached text will be
put in your current file at the page and line corresponding to  where it
came from but in the wrong file. This will be fixed some day. 

Commands

⊗ε<file name><cr>  Close the current  file and open  the specified
        file in read-write mode.   The usual switches /#P, /#L and
        /C may be used.The new file is assigned a serial number by
        which it  may  be called  later.    (The initial  file  is
        numbered 0). When called by number the display is returned
	to the last referenced page and with the arrow on the last
	referenced line and all previously set line marks restored.

⊗3⊗ε    Reopen the file assigned the serial mumber 3 in read-write
        mode. Note that no carriage return is used in this case.
	Return the display to the last referenced page. Return the
	arrow to the last referenced line and restore all previous
	line marks. (Use the ⊗∃ command, below, to find numbers).

⊗λ<file name><cr>  Close the current  file and open  the specified
        file in read-only  mode.  The  usual switches /#P  and /#L
        may be used.   The new file is assigned a serial number by
        which it  may  be  called  later.   (The  initial  file is
        numbered 0). 

αβ3⊗λ   Reopen the file assigned the serial mumber 3 in  read-only
	mode.

⊗∃      List the previously referenced files with their serial
	numbers.  For convenience the letter H replaces the number
	in the listing of the "HOME" file and a "]" is used rather
	than a ")" for the file currently displayed.

⊗0⊗∃	Move the current-file listing to location zero and flush
	all other listings (to make room for more).

⊗H      Return (HOME) to the last referenced file.  The E-manual
	file is not considered a HOME file.

⊗2⊗0⊗1⊗H  Return (HOME) to the last referenced file on page 201.
	The E-manual file is not considered a HOME file.

⊗-⊗2⊗3⊗H    Return (HOME) to the last referenced file on a page
	that is 23 pages earlier than the last referenced page.
	The E-manual file is not considered a HOME file.

⊗?      Close the  current   file  and  open  the  E  manual file
	E.ALS[UP,DOC]  on the directory page, or, if it has been
	referenced earlier, to the last referenced page and line.
	page and line.

⊗8⊗?	Close the  current   file  and  open  the  E  manual file
	E.ALS[UP,DOC]  on page 8.

⊗-⊗2⊗?  Close the current  file  and  open  the  E  manual file
	E.ALS[UP,DOC] at 2 pages before the previously referenced
	page.

MARGIN CONTROL commands: ⊗XJUST ⊗XJFILL ⊗XCENTER ⊗XJOIN
	(See p. 17 for ⊗XALIGN, ⊗XINDENT, ⊗XJLEFT).

   The JUST and JFILL commands are useful for  doing left-margin, and/or
right  margin justification.  The  first line of each  new paragraph may
also be  indented with  respect to  the body  of the  paragraph.   These
commands  apply to the  ATTACH buffer when  they are given  while in the
ATTACH mode. They may be limited to a specified  number of lines or they
can apply (by default) to the entire ATTACH buffer or to the entire page.

    These commands take  two different types  of arguments,  an  initial
argument which  specifies the  number of  lines to be  handled,   and  a
following string  of numbers separated by commas to define the paragraph
first-line margin, the left margin, and the right margin.  Any or all of
these  arguments may be  omitted, if commas  are used  to denote omitted
values in the margin specifying string. 

    The default option as to the number of lines is the full page or the
full ATTACH  buffer for the JUST  AND JFILL commands and  it is one line
for  the  CENTER  command.    The  default  options  as  to  the  margin
specifications are  originally set to  1,1,69 for paragraph  first line,
normal left  margin and right margin.  The margin default values for the
margins may be changed by "sticky" commands, as noted below. 

   JUST and JFILL recognize the first line of  a paragraph either by the
fact that the paragraph  is preceded by a blank line or by the fact that
the first line begins with  a TAB or with  a period.  TABs and  periods,
when so  used, are retained  during the JUST  or JFILL operation  if the
first-line  left margin is specified as  one, otherwise they are deleted
and replaced by the required number of spaces.  It  should be noted that
these  spaces will  not  be recognized  by ETV  as  the start  of  a new
paragraph during a subsequent JUST or JFILL operation. 

   The first line  of the total text  is not automatically treated  as a
first line of a paragraph. This restriction is actually rather arbitrary
and could be changed.  It was adopted because it seems unwise  to indent
page headings and one frequently wants to  fix up the end of a paragraph
with out having to rejustify the entire paragraph. One can always indent
the first line  of a  block of text  when a limited  number of lines  is
specified by starting the  justification with a blank line preceding the
block or by using a TAB or a period as the first character. 

   The CENTER command differs  from the JUST and JFILL  commands in that
no filling  is done and in that the default  argument is one line rather
than the  entire page except  when in  the ATTACH  mode when  it is  the
entire ATTACH buffer.  It is similar  to these other commands in its use
of  the same left  and right margin  values and in its  following of the
same conventions  for the specifications  of these  margins.  Should  an
attempt be  made to  center a line  that is too  long to fit  within the
specified margins, the line is simply pushed as far left as possible.

   Margin specifications:
   
   Margin specifications may be made applicable to only a single command
with the default value unchanged, by using the  CONTROL key only, before
the X, or they may be made to alter the default values as well, by using
both the CONTROL and META keys.

   The  complete  specification  is   in  the  form  <first  line>,<left
margin>,<right margin>  However, any combination af these numbers may be
omitted  as long  as  the  necessary  commas to  prevent  ambiguity  are
included.

   To change  the paragraph indentation  alone, it is  only necessary to
type a single decimal number (of not  more than 3 digits) to specify  an
absolute position. If the number is preceded by a  plus or minus sign it
then specifies  a relative first line indentation  from the current left
margin value. A  subsequent modification to the  left margin will  alter
the paragraph indent  value so as to maintain the  same indentation from
the body of paragraph.

   To change the left  margin specification alone, it is  only necessary
to type a comma followed by the desired decimal value.  In this case the
paragraph indentation remains fixed, rather than its absolute value.  Of
course if  the paragraph margin value  is specified in the  same command
string  then this value will not  be altered, the absolute specification
in this case will over-ride the usual rule.

   To change  the right  margin alone, it  is necessary  to precede  the
decimal number by two commas.

   Typical command strings.

   ⊗XJUST<cr>	Justify the current page  (or the ATTACH buffer if in
		ATTACH mode) using the default values for the initial
		line left, regular left and right margins.
		Margins are initially set to 1,1,69.

   The JOIN command is a special case of JFILL  with a default option of
two lines and a right margin default option of 80. Only the right margin
can be specified.  

   Typical commands.

   αXJUST +3,4,66<cr>   Justify the current page or the ATTACH buffer
		using temporary margins as specified (in this example
		to 7, 4 and to 66 respectively).

   αβXJUST ,4,66<cr>    Justify the current page or the ATTACH buffer
		using new sticky margins as specified.      These new
		values now become the default values.   The paragraph
		indentation will be left at the previously  specified
		value.

   ⊗13⊗XJUST<cr>	Justify 13 lines starting with CURRENT.   May
		be combined with margin specifications,  which may be
		may be made sticky or temporary as desired.

   ⊗XJFILL<cr>	Redistribute text between lines as if to justify, but
		but do not pad lines out with blanks. (see ⊗XJUST<cr>
		above for conditions).

   ⊗XCENTER<cr> Center the CURRENT line or first line,if in the ATTACH
		mode,  between the default values for the regular left
		and right margins.

   ⊗4A⊗XCENTER<cr>	Attach 4 lines and Center the first line only.
   ⊗4A⊗3⊗XCENTER<cr>	Attach 4 lines and Center the first three lines.

   ⊗XJOIN<cr>	JOIN the current line and the one that follows with a
		line length limit of 80 characters in the first line.
		Make into as many lines as necessary to limit each
		line to 80 characters.

   ⊗XJOIN 120<cr>	JOIN the current line and the one that follows
	        with a line length limit of 120 characters in the first
	        line.
More MARGIN CONTROL commands: ⊗XALIGN ⊗XJLEFT ⊗XINDENT ⊗→ ⊗←
	(See p. 16 for ⊗XJUST, ⊗XJFILL, ⊗XCENTER, ⊗XJOIN.)

      These commands  preserve  the identity  of  the text  lines  while
preforming certain operations on their left margins. 

     ALIGN  deletes all leading spaces and  TABs and moves the specified
lines (with the entire page or  ATTACH buffer as the default option)  so
that all  lines start at the  specified location.  Accordingly  it takes
only a  single margin specification which may be designated as sticky or
as temporary.  ALIGN replaces  all interior TABs with spaces  before the
lines are  moved.  This has  the effect of preserving  the original TAB-
specified spacing thus permitting tables to be shifted right or left  by
any desired  amount without  losing alignments.   As  a safety  feature,
lines  which would extend  beyond column 120  (the capacity  of the line
editor) are only  moved as  far as  can be done  without exceeding  this
limit. The default alignment position is column 1.

     JLEFT  is not implemented at present.  The next paragraph describes
the intended implementation.
     JLEFT does  not replace interior  TABs so that  portions of a  line
beyond a  TAB will still be  at TAB boundries (although  not necessarily
the same one). This allows code to be moved to the right or left a small
amount without changing the position of the associated comment. 

   INDENT simply moves the specified number of lines (default value of 1
except when  in the ATTACH mode when it is  the entire ATTACH BUFFER) to
the right or left by the specified amount independent of  their original
starting positions.   This permits blocks  of code to be  moved right or
left while preserving their original relative indentations. INDENT takes
one differential margin specification, (to the right  or minus if to the
left) subject  to the restriction that lines  are never moved far enough
to move  off of the  allowed page  (beyond position  1 to  the left  and
position  120 to  the  right).   The  indentation  specification may  be
designated  as sticky or as temporary.   The initial default indentation
value is 4. 

   The commands ⊗→ and ⊗← are special cases  of INDENT.   They move  the
specified  lines to  the right  or left  by one  position.   The default
number of lines is one if not in ATTACH mode or it is the  entire ATTACH
buffer.   They  work only  in the  NORMAL and  ATTACH modes  and do  not
require a ⊗X or a carriage return.  In common with INSERT they limit the
text motion to the range from column 1 to column 120. 

Typical commands.

   ⊗XALIGN<cr>	ALIGN the entire page (or entire ATTACH buffer if in
		ATTACH mode)  with all lines moved to start with the
		default ALIGN margin (originally set to 1).

   α4αXALIGN 5<cr>      ALIGN 4 lines starting with CURRENT (or with
		the start of the ATTACH buffer if in ATTACH mode)
		to a left margin starting in column 5.

   αXINDENT<cr>	INDENT the CURRENT line (or the entire ATTACH buffer
		if in the ATTACH mode) by the default value  (set to
		4 initially), but do not let any line move far enough
		to be moved off the page.

   α6αXINDENT 3<cr>	INDENT 6 lines starting with CURRENT by 3,
		with this as a temporary specification only.

   α6αXINDENT -3<cr>	INDENT 6 lines starting with CURRENT by -3,
		(that is move them to the left by 3 positions)
		with this as a temporary specification only.

   αβ8⊗XINDENT 3<cr>	INDENT 8 lines starting with CURRENT by 3,
		with the new default value being set to 3.


   ⊗→		Move the CURRENT line or the ATTACH buffer contents
		to the right by one position if this can be done
		without the text going beyond column 120.
                While  it is  also possible  to  specify a  desired
                number of lines to be indented by giving an initial
                argument without  entering  the ATTACH  mode,  this
                fails to work correctly if  any of the lines beyond
                the first one start with TABs. 

   ⊗←		Move the CURRENT line or the ATTACH buffer contents
		to the left by one position if this can be done
		without going beyond column 1, that is without losing
		any non-blank characters.

   ⊗6⊗→		Move 6 lines starting with the CURRENT line or with
		the start of the ATTACH buffer to the right by one
		position if this can be done without the text going
		beyond column 120.
Other EXTENDED commands: ⊗X<cmd>
   
   Certain commands are potentially too dangerous to be safely evoked by
a single  character. There are also more  commands than can  be obtained
with single characters.  These contingencies are  handled by the  EXTEND
command specified as follows:

   ⊗X     Accept the string which follows as a command. This
	  string may be abbreviated  as long as no ambiguity
	  results.  The string must be terminated by a space
	  if parameters are required,  or  by a <cr> or some
	  other delimiter.

   The EXTEND form  of the FIND  command has already been  discribed. In
this case only a single letter needs be used,  but any partial string up
to the  complete  word FIND  is acceptable.    The ⊗XJUST  and  ⊗XJFILL
commands (see p. 16) are perhaps more typical.

   EXTEND commands.

   ⊗XBACKGO	Go back to the last page referenced just before
		the one	now being viewed.

   ⊗XFIND	See p. 13 for details on FIND.

   ⊗XJUST<cr>	Justify the current page  (or the ATTACH buffer
		if in ATTACH mode) using the default values for
		the paragraph, left and right margins.  Margins
		are initially set to 1,1,69.  For elaborations on 
		this basic command, see p. 16.

   ⊗XDRAW<cr>	Redraw the complete screen.  Used when unwanted
		marks show on the screen from whatever cause.
		(This does the same thing as ⊗V).

   ⊗XMARK<cr>   Insert a page mark between the CURRENT line and
		the line above it and display the new page.

		CAUTION * * Do not try to use this command when
		the arrow points to an empty line or when it is
		pointing to the row of asterisks at the bottom.
		This may appear to work but it can also cause a
		discrepancy to occur on the directory page that
		can cause you real trouble later.   So don't do
		it.  Instead, type the line that you want to be
		at the top of the new page at the bottom of the
		existing page, and put th mark before this line.

   ⊗XDELETE<cr> Delete the page mark between this page and the next.
		Note that using this command just after a ⊗XMARK
		command does not undo the newly inserted mark
		but it does delete the next mark.

   ⊗XCANCEL<cr> Do not write out the current page but instead 
		reread it in from the disk.

   ⊗XSPOOL<cr>	SPOOL the core image of the current page, or the
		ATTACH buffer if something is attached,  without
                writing it out  on disk in the normal  way. This
                allows you  to keep a copy  of changes that  you
                have  made  whether   or  not   you  intend   to
                incorporate them into the  disk copy of the file
                that  is being edited.  The  spooler copy of the
                page is deleted as soon as it  has been printed.
                The  printed   copy  carried  the   same  header
                information as it would have carried had it been
                spooled in the usual way. 

   ⊗XXSPOOL<cr>	XSPOOL the current page under the conditiond noted
		above.

   ⊗XREADONLY<cr> Inhibit any further writing of the file.

   ⊗XREADWRITE<cr> Disable the write-inhibit.

   ⊗XGO<cr>	Exit from E and repeat the last RPG command.


   ⊗XDDT<cr>	Branch to RAID if it is present. αP returns.

   ⊗XAPPEND<cr>	Read in an additional page after the current
		one so that the two may be edited together.
		Effect is undone by ⊗XCANCEL<cr>.
		Caution: there is a bug in this command and besides
		it increases core size unnecessarily so use with caution.

   XLINCNT<cr>	Type the current line number and the number of lines
		in the current page.
		(Useful formatting information).

   ⊗XCLOSE<cr>	Close the file.  This allows others to read it
		if you had modified it.

   ⊗XDIRED<cr>	Same as ⊗XRSYS DIRED

   ⊗XDPYALWAYS<cr>	Always re-display text after each command.

   ⊗XDPYSKIP<cr>	Don't re-display text if there are typed-ahead
			commands to be executed.  (normal mode)

   ⊗XINSERT<cr>		Same as β<form>; insert a page mark line.

   ⊗XPPSET<cr>		Reset screen position of page printer (the three
			lines at the bottom of the screen which echo commands).

   ⊗XQUIT<cr>		Same as ⊗XCANCEL followed by ⊗E

   ⊗XRSYS PRGM<cr>	Exits and runs SYS:PRGM

   ⊗XRUN PRGM<cr>	Exits and runs DSK:PRGM

   ⊗XTV<cr>		Starts TV editing the same file E was, in the same place.

   ⊗<n>⊗XTYPE<cr>	Types n lines starting at CURRENT and moves CURRENT
			past those lines.  Primarily useful from
			non-display terminals.
System commands to evoke E, SWITCHES for file switching.

   Basic commands

	CETV <string><cr>
		Create a new file with the name and extension as
 		  specified by string.
		  The file will contain a directory page and one
		  blank page. E will be in the ADD-LINE mode.
	ETV <existing file name><cr>
		Enter E with the specified file. If the file has
		  but one text page, display this, otherwise
		  display the directory page.
	ETV	Reenter E with the most recently edited file and
		  display the most recently opened page (subject
		  to certain restrictions as described in the
		  Monitor Manual).	
	ETV <string1>←<string2><cr>
		Copy file named string2 into a new file named
		  string1, start E and display the text as above.
		  If the string2 file has a valid directory this
		  is executed relatively rapidly, if not a new
		  directory will have to be created. (See the note
		  below with respect to the /N switch).

	R E;<string1>←<string2><cr>
		Similar to ETV  <string1>←<string2> except for the
		  way it handles the TMPCOR files. (See the Monitor
		  Manual for this and other RPG features).

   Switches, when used, are strings beginning with a slash which are
placed immediately after the name string that they are to modify.

	/C	Create a new file with the specified name.  This is of
		  most use when one wishes to open a new file as a place
		  to copy information from some other file using the ⊗λ
		  command.
	/R	Open the file in the read only mode. This is useful
 		  if one wants to examine a file without any danger
		  of inadvertently modifying it.
		    example: ET TEACH.TXT[UP,DOC]/R<cr>
		  This is not very useful by itself but see below.
	/N	No Directory. At the present time E gets into trouble
		  frequently when editing files without Directories.
		  The inexperienced user is advised to avoid this mode.
		  The /F and /F/R switches, as discribed below, are to
		  be prefered.
	/F	Repage and reformat the file with the maximum  page size
		  limited to the default value of 33 (one screen-full on
		  the DD).  The F may be preceeded by a decimal argument
		  to use any desired number. Old page marks are retained
                  however, so  it is not  possible to increase  the page
                  size by this switch and some pages may be shorter than
                  the specified  length.   This switch  is  particularly
                  useful for getting long unformatted files into a shape
                  where they can be handled safely and easily. 
	/F/R    Repage  and  reformat  the  core  version  only  without
                  changing the disk  copy. The new directory will  be on
                  page 0 and the old directory (if there is one) will be
                  kept as a part of the text starting on page 1.  Do not
                  try to use  the old directory as it is  invalid.  This
                  switch  combination is particularly useful for examing
                  (without altering)  unformatted files  that have  been
                  produced by programs other than E. 
	/2P	Open the file displaying page 2.
	/5L	Open the file with the arrow at line 5, used with the previous
		  switch.

   When two or more switches are to be used they may be put together
inside parenthesis.

		example: ET MYFILE(R4P5L)<cr>
Using ETV from a TTY or IMLAC.

Note: This page  is currently being composed without  my having
confirmed  the information  that is being  recorded. It  may be
greviously in error. 

It is  possible  to use  ETV from  a no-display  terminal.   Of
course, some of the advantages of ETV over say SOS are lost but
one may  not want  to go  to the  trouble  of having  switching
editors in mid-stream.  As partial compensation for the lack of
display features, ETV  provide the TTY user with  line numbers.
The  lack  of  CONTROL and  META  bits  does introduce  certain
operating difficulties. See the MONITOR COMMAND MANUAL sections
3 and 4.7 for other information of interest to TTY users.

No special action is required of the TTY  user to tell ETV that
a  TTY is being used.  This  happens automatically  when ETV is
called and the user is informed of this by a special message. 

The mode distinction which  has been referred to previously  is
much more  distinct when  operation from a  TTY. There  are two
main  modes. Initially, all characters typed  to ETV from a TTY
are assumed to be commands, that is the character  is read by E
as  if it  had  been  typed with  both  CONTROL and  META  keys
depressed. One can, however, enter an INSERT mode by typing the
character I and then everything thereafter (with  the exception
of certain preempted control signals) is accepted as text. 

The ALT or DEL key is the escape key (octal 175)  which returns
one to  the COMMAND mode. Because of this usage, the use of ALT
to abort certain ETV commands is seriously impeded. 

One is denied the  use of the LINE-EDITOR features  so that the
only way to alter  an existing line is to delete it and type it
in from scratch.

On  most no-display  terminals,  it  is  not possible  to  send
commands  that require a  single  Stanford-keyboard control key
(either the CONTROL  or the META key  only) as contrasted  with
those that permit  either the CONTROL only or  both CONTROL and
META keys.

The control  key on  the  TTY is  not at  all the  same as  the
Stanford-keyboard  CONTROL  key  referenced  in  most  of  this
manual.   Some  teletype control  characters  are part  of  the
extended character set  at Stanford and can thus  be typed (see
the complete list at the end of this page). 

Some characters  cannot  be sent  at all;  their  use has  been
preempted  by  the  system.   When  these  characters exist  in
previously prepared text they will  print as shown by the  list
below.  Note that the form in which they print will depend upon
the terminal that you are using to read the text; an LPT or XGP
output will, of course,  be in the Stanford  extended character
set.   Most  terminals use  two characters,  the  first usually
being an up-arrow. 

Stanford characters  that  cannot be  sent as  text  or as  ETV
control characters are:

Octal	Usual		Prints	Typed	Preempted as a system
	name		out as	in as	  command used for

002	alpha		α	<ctr>B	type-out pause (toggles)
003	beta		β	<ctr>C	monitor call
017	delta		∂	<ctr>O	flush type-out (toggles)
025	there exists	∃	<ctr>U  flush type-in 
032	tilde		~	<ctr>Z  end of file
033	not equal	≠	<ctr>[  altmode

  Use of the IMLAC

  ETV is  more useful from  the IMLAC.   If you are  in command
  mode,  you have a  choice: send  the command with  no control
  bits (it will be interpreted  as if it had both control  bits
  on),  or  with selected  control  bits  (this is  useful  for
  distinguishing between  αM and αβM, which cannot be done from
  a TTY). 
  It  is possible  to  give  substitute commands  since  α\  is
  transmittable.     However,  E   does  not  know   about  the
  line-editor capabilities of the IMLAC and will fail (fatally)
  if you try  to end a  substitute command with α<cr>.  It will
  merely refuse  to comply if you try  to enter the line-editor
  with, say, α<sp>. 

Character equivalences

Code	Name		Prints	Typed	Preempted
octal			out as	in as	for

000	null
001	down arrow	↓	<ctr>A
002	alpha		α	<ctr>B	type-out pause (toggles)
003	beta		β	<ctr>C	monitor call
004	logical and	∧	<ctr>D
005	logical not	¬	<ctr>E
006	epsilon		ε	<ctr>F
007	pi		π	<ctr>G

010	lambda		λ	<ctr>H
011	TAB
012	LF
013	VT
014	FF
015	CR
016	infinity	∞	<ctr>N
017	delta		∂	<ctr>O	flush type-out (toggles)

020	containment	⊂	<ctr>P
021	implication	⊃	<ctr>Q
022	intersection	∩	<ctr>R
023	union		∪	<ctr>S
024	for all		∀	<ctr>T
025	there exists	∃	<ctr>U  flush type-in 
026	circle times	⊗	<ctr>V
027	double-arrow	↔	<ctr>W

030	underbar	_	<ctr>X
031	right-arrow	→	<ctr>Y
032	tilde		~	<ctr>Z  end of file
033	not equal	≠	<ctr>[  altmode
034	less or equal	≤	<ctr>\
035	greater or eq	≥	<ctr>]
036	equivalence	≡	<ctr>↑
037	logical or	∨	<ctr>←

040	SP
041	exclamation	!	!
042	double quote	"	"
043	number sign	#	#
044	dollar sign	$	$
045	percent		%	%
046	ampersand	&	&
047	close s. quote	'	'

050	left paren	(	(
051	right paren	)	)
052	asterisk	*	*
053	plus		+	+
054	comma		,	,
055	minus		-	-
056	point		.	.
057	slash		/	/

060	digits		0	0
...
071			9	9
072	colon		:	:
073	semicolon	;	;
074	left broket	<	<
075	equal		=	=
076	right broket	>	>
077	question mark	?	?

100	at sign		@	@
101	upper-case	A	A
...
132			Z	Z
133	left bracket	[	[
134	back slash	\	\
135	right bracket	]	]
136	up¬arrow	↑	↑
137	left-arrow	←	←

140	open s. quote	`	`
141	lower case 	a	a
...
172			z	z
173	left brace	{	{
174	vertical bar	|	|
175	ALT			ALT or ESC
176	right brace	}	}
177	BS or DEL		BS or DEL
PARENTHESIS finding/matching commands: ⊗( ⊗) ⊗↔ ⊗XPAREN

  This set of commands allows one  to check  nested sets  of bracketing
symbols for matching  pairs and for  related properties.  The  search is
restricted  to the current page.  It always starts from  the location of
the cursor at the time the command is given  and proceeds in the forward
direction.  The nesting level is re-assigned the value 0 at the cursor's
current position for each new command  (see special conventions below).

   The default symbols are  the normal parentheses ( and  ).   An EXTEND
command  <META><CONTROL>XPAREN allows one  to  define any  desired  set.
The command itself  must be  delimited by  a space and  followed by  the
desired two  characters and a carriage  return.  If the  desired pair is
from the  set →←, ⊂⊃, `', ≤≥, {}, <>, [], then only the first of the set
and a carriage return should  be typed.  If another set had  been chosen
the  default set  may be  reset  by typing  the setting  command  with a
carriage return only.

   Note, that a space is an acceptable symbol  and for this reason extra
spaces are  not permitted in the command string.   A distinction is also
made between upper and  lower case characters so that both  may be used.
In the special case when the same character is assigned to both symbols,
the concept of nesting has  no meaning and the commands are  interpreted
differently, as noted in the special section below. 

   In what follows, the two symbols of the chosen  set wil be refered to
as the left-symbol and the right-symbol respectively. 

   The normal commands are then  <META><CONTROL>( and <META><CONTROL>) .
Each  of these  may  take an  argument  which specifies  the  sought-for
nesting  level for  the region  defined by the  bracketing symbol.   The
default argument is 1 for both commands. 

   There is  one additional  command <META><CONTROL>↔ which,  in effect,
un-does the  last (, ) or ↔ command and returns the cursor to its former
position. 

   Note that the most frequent use of these command will be in LISP
   where one wants  to find matching parentheses, and hence the use
   of ( and ) for the commands and for the default symbols.

   SAIL users may find it useful to  define an otherwise unused set
   of symbols to  mean BEGIN and END (some people already use ⊂ and
   ⊃ for this purpose), and to use these symbols in their stead, at
   least while debugging. 

Special conventions

A special convention has been adopted to avoid ambiguity for those cases
in which these  commands are given while the line-editor cursor is under
one of the searched-for bracketing  symbols.  This convention is that  a
cursor under a left-symbol is presumed  to be actually to its left, that
is,  outside  of  the  symbol  (as it  appears)  and  a  cursor  under a
right-symbol is presumed to be  actually to its right, again  outside of
the symbol (and again as it appears). 

   Arguments, when used with these commands refer to the desired nesting
level within the  region defined by the nesting pairs. If no argument is
given, the default value is  1, in accordance with the usual  convention
for  most ETV  commands. As  a mnemonic  aid, the  sought-for symbol  is
reported   with  the  argument  shown   after  left-symbols  and  before
right-eymbols although  the argument  must  always be  typed before  the
command  (to permit the  command character,  itself, to  be used  as the
activator). 

   By convention the starting  level is always re-assigned the  value 0.
Left- symbols increase  the nesting level and right-symbols decrease the
level. 

Typical commands

<META><CONTROL>4<META><CONTROL>(     Move the cursor to that left-symbol
which would  cause the nesting  to reach a  level of 4,  considering the
present  cursor position to be  at level 0.   Do not move  the cursor if
this level is  not found  and report  the deficiency.   This request  is
reported as (4 for the reasons noted above.

Note that  <META><CONTROL>(  without an  argument finds  the very  first
left-symbol.  If  the cursor is already at a left-symbol this command is
a NO-OP.  This is in consequence of the convention  that  a cursor under
a left-symbol actually refers to the situation just ahead of the symbol.

<META><CONTROL>)     If  the  cursor is  already   positioned  under   a
left-symbol, move the cursor to the matching right-symbol. If the cursor
is  not under  a  left-symbol, then  search for  that  right-symbol that
returns returns the nesting level to its initial value of 0.  Should the
cursor be under a right-symbol, the initial level is taken to be that at
its  right.  Note that this  command is a NO-OP  only for the case where
the desired level cannot be found. This request is reported as 1). 

   If the end of the text is reached before a transition from level 1 to
level 0  is found, the cursor  is left in its  original position and the
deficiency is reported along with the other data. Deficiencies,  in this
case can be of two sorts, either a level of 1 is never reached or having
been  reached  and possibly  exceeded  as  a result  of  left-symbols, a
right-symbol is  never encountered while  at this  level.  In  the first
case, the deficiency figure  is reported following a down arrow (meaning
always below). 

<META><CONTROL>3<META><CONTROL>)	 Search through the text as just
just described  but  stop at  the first  right-symbol  that reduces  the
nesting-level from the  specified level, in this case 3. This request is
reported as 3). 

Interpretation when the same character is used for both symbols.

   Both the ( and the ) command, in this case, ignore the symbol that is
above the cursor at the time the command is given and search for the Nth
next example of the  specified symbol, where N  is the argument that  is
used with  the command.  The ( command  is not a  NO-OP in  this special
case. 

Automatic and manual BEEPING upon command completion: ⊗XBEEP

   The user may now set a flag that will  causes ETV to beep his console
at  the conclusion  of  any command  execution taking  longer  than some
preassigned value of real time.

   This flag  is now preset  to the NO-BEEP  condition. If  enough users
like  the feature the  flag can easily  be preset to  the BEEP condition
with the preassigned value set to any desired number of seconds. 

   The commands are:

⊗XBEEP      Beep me now.   This may be typed ahead when ever desired and
            you will be beeped on the conclusion  of the pending command
            execution regardless of how long it takes. This command does
            not alter the setting of the BEEP-NO-BEEP flag,  nor does it
	    change the preset timer value.  It is a one shot command.

⊗#⊗XBEEP    Set the beep  flag to the BEEP  condition and set the  timer
	    value to # number of seconds (where # is a decimal number).

⊗0⊗XBEEP    Set the beep flag to the NO-BEEP condition, without changing
	    the timer setting (which, of course, will not be used).

⊗+⊗XBEEP    Set the beep flag to the BEEP condition without changing the
	    preassigned timer setting and report this time.
Message handling partial-sign command: ⊗∂<cmd> ⊗0⊗∂

The new partial-sign (∂) command is designed for easy handling of
messages in mail files, but it can be used on any file regardless of
whether the file contains mail-like messages.  For instance, this
command is capable of attaching (or deleting) a whole page of text at
once and simultaneously deleting the pagemark for that page. 

The ⊗∂ command is a search command used to find the beginnings of
"messages."  A message is defined as the largest contiguous set of
lines of which only the first starts with a partial-sign (∂) and the
last of which is followed either by another line starting with
partial-sign or by the end of the page.  The current message is
defined as the message containing the current line (the arrow line).
If the arrow is on the row of stars that marks the end of the page,
then the current message is the one that contains the last real line
of the page.  (Perhaps later the character which delimits "messages"
will be user-settable, but for now it is always partial-sign.)

Messages are never considered to extend across page boundaries.  If
neither the current line nor any of the lines preceding it on the
current page starts with a partial-sign, then the current "message"
starts with the first line of the current page.  If none of the lines
(on the current page) below the current line starts with a
partial-sign, then the last line of the current "message" is the last
line on the page.  Thus, if there are no lines on the current page
that start with ∂, then the current "message" is the whole page. 

Like the ⊗F command, the ⊗∂ command requires a following command
before any action is taken (with one exception, which is noted
below).  However, the ⊗∂ command does not accept a search string
before the second command; ⊗∂ always searches for lines beginning
with a partial-sign.  If the command following is one of the special
commands that use the number of lines searched (for instance, by the
⊗F command) as the argument to the command, then that command will be
carried out for the entire current message.  If the command is not
one of these special ones, then it will be executed at the end of the
current message.

Currently the special commands that use the number of lines searched
as the command argument are: αβD (delete), ⊗A (attach), ⊗C (copy),
XALIGN, XCENTER, XINDENT, XJFILL, XJOIN, XJUST. 

The ⊗∂ command may be preceded by a numeric argument which specifies
the number of messages (starting with the current one) which the
command is to affect.  If that number is negative, then the messages
just before the current one are the ones effected, with the absolute
value of the argument specifying how many messages.


N.B.: A zero argument to the ⊗∂ commands means move to the beginning
of the current message WITHOUT WAITING FOR A SECOND COMMAND.  This is
the only case where a second command is not used by the ∂⊗ command. 


!!!!! SPECIAL FEATURE OF THE PARTIAL-SIGN COMMAND !!!!!
N.B.: If the partial-sign command is used with ⊗A (attach) or
      αβD (delete) to attach or delete every line on the
      current page, then the current page itself, i.e., its
      pagemark, will also be deleted.  In particular, if the
      current page is not the last page in the file, then the
      following pagemark will be deleted, leaving you at the
      top of that page; if the current page is the last page
      in the file, then the preceding pagemark will be deleted
      and you will be left at the bottom of the previous page.
      However, no pagemark deleting will be done if the file
      has only one page besides the directory.  And note that
      the page deleting only happens when the entire page's
      text is either deleted or attached using the
      partial-sign command! 


If there are already some lines in the attach buffer at the time you
give an ⊗∂⊗A command, the new messages being attached are added at
the end of the attach buffer.  If you give a ⊗-⊗∂⊗A command when
there are already lines in the attach buffer, the new messages being
attached are inserted at the beginning of the attach buffer, ahead of
the text already there. 


Here are some example uses of the partial-sign command.  The ones
marked with an asterisk (*) all involve either αβD or ⊗A and will
delete a pagemark in addition to the action noted if the action
results in an empty page which is not the only page (besides any
directory) in the file. 


      ⊗∂αβD	;* Deletes the current message.
      ⊗∂⊗A	;* Attaches the current message.
      ⊗∂⊗C	;Copies the current message into the attach buffer.

      ⊗-⊗∂<cr>	;Moves to beginning of previous message.
      ⊗0⊗∂	;Moves to beginning of current message.
      ⊗∂<cr>	;Moves to beginning of next message.

      ⊗∂<vt>	;Moves to end of current message.
      ⊗∂⊗J	;Moves to beginning of next message and jumps screen up.
      ⊗∂αβ<cr>	;Enters line-insert mode between the end of the
		;current message and the beginning of the next one.

      ⊗3⊗∂⊗D	;* Deletes three messages starting with the current one.
      ⊗3⊗∂⊗A	;* Attaches three messages starting with the current one.
      ⊗3⊗∂⊗C	;Copies three messages starting with the current one.

      ⊗-⊗2⊗∂⊗D	;Deletes the two messages preceding the current one.
      ⊗-⊗2⊗∂⊗A	;Attaches the two messages preceding the current one.
      ⊗-⊗2⊗∂⊗C	;Copies the two messages preceding the current one.

Defining and using MACROS: ⊗XDEFINE ⊗Y

To save the user the trouble of having to type the same sequence of
commands several times, E now provides a very simple macro facility.
The XDEFINE command is used to define a macro as an arbitrary string
of characters (any of which can have either or both of the CONTROL
and META bits on).  Then, the ⊗Y command is used to invoke expansion
of the macro, which is equivalent (with only a couple of exceptions)
to actually typing the command- and/or text-characters that make up
the macro definition.

At present, there is only one macro definition retained by E, and
that definition is caused to be expanded by the ⊗Y command.  Later
there may be ways of defining more than one macro at a time.  Also,
at present there is no way to define a macro that takes text
arguments to be substituted into the definition during expansion, but
this may also be added later.

A macro can be caused to be expanded a number of times in a row by
preceding the call by a numeric argument; e.g., ⊗7⊗Y will expand the
macro 7 consecutive times (unless an error or interruption
occurs--see below).

The command ⊗0⊗Y will type out the current macro definition without
expanding it.  In the typeout of the definition, the characters α and
β are used to represent the display keyboard bits CONTROL and META,
respectively, and certain non-printing characters are printed as
<name of char>.

Normally, expansion of a macro continues until the end of the
definition and the exhaustion of the repeat argument.  However, there
are numerous errors which, when detected by E, will cause immediate
termination of any macro expansion in progress.  Also, the user can
manually interrupt macro expansion by typing ESC I (display terminals
only, sorry).  If E asks a Yes or No question (to be answered Y or
N), it will ALWAYS read the answer from the terminal, never from a
macro expansion in progress; and if the answer is no, then macro
expansion will be terminated.  Finally, if a macro calls or redefines
itself, then the original call will be terminated but the second call
or the redefinition will nevertheless happen.  In the case of a macro
calling itself, the second call will run from the beginning of the
definition, and there is no way for the macro to run to completion
because it will always call itself before it completes expansion.

Most errors will terminate macro expansion immediately.  Among those
errors that terminate macro expansion are all of the errors that
generate messages of the form "SORRY -- ...." plus the following:

    1) Search failure.
    2) Substitution failure.
    3) Illegal command given from the line editor.
    4) Saying anything but Y (for yes) to a Yes or No question.
    5) Bad filename or file not found by the ⊗ε or ⊗λ command.
    6) ALTMODE termination of an extended command.
    7) Improper argument to XPAREN command.
    8) Invalid directory pointer.
    9) A checksum failure in the upper segment.
   10) Redefining the macro.

When a macro is expanded, the display is normally not updated until
the macro has terminated.  However, if the ⊗V command occurs as a
command within a macro, the screen will be updated immediately when
the expansion reaches that command.  Thus by putting ⊗V commands at
strategic places in the definition, you can observe the progress of
the expansion. 

During macro expansion, E omits the prompts for commands that read
characters from the terminal since the characters are instead read
from the macro definition; in particular, the "COMMAND?" that follows
the ⊗X command, and the "File?" that follows ⊗ε and ⊗λ commands are
all suppressed.  Also, "OK" is not typed out during expansion.
However, informative typeouts are not suppressed in any way during
expansion.  Also, since lines can be edited (through the line editor)
by a macro expansion, the echo of such edited lines will appear
during the expansion. 

Commands:

	⊗XDEFINE<cr>
All characters up to the end-of-definition character are read and
stored exactly as typed.  The end-of-definition character for macro
definitions is the terminal's end-of-file (EOF) character: αβ<lf> on
displays and Imlacs and ↑Z on other terminals.  During macro defining
no check is made to ensure that the string is a legal sequence of
commands.  If the EOF character is the first character typed, then no
definition is stored and any previous definition is preserved;
otherwise any previous definition is discarded.  Note that ALTMODE
does not end a macro definition; ALTMODE is a legitimate command to
be included in a macro.  IMPORTANT NOTE FOR DISPLAY USERS: When
defining a macro, normal line editor commands (BACKSPACE, α<FORM>,
etc.) are activation characters instead and will be put into the
definition exactly as typed with the exception of CLEAR, which will
clear your line editor just as always.  Thus if you make a mistake
while typing a line in the definition, DO NOT TYPE BACKSPACE to back
up; you must type CLEAR and then retype the correct version.  If you
type BACKSPACE by mistake, the only way to correct the macro
definition is to finish it with the EOF character and then re-enter
the correct version with another XDEFINE command.  BACKSPACE can,
however, be included in the definition as precisely that, BACKSPACE,
but avoid putting BACKSPACE at the end of an extended command name, a
search string, or a filename (because the BACKSPACE would be treated
as an activation character in the macro expansion).  Note that this
warning does not apply to non-display users, whose BACKSPACE
character can still be used to back up over the last character in the
current line, even during the macro defining. 

	⊗Y
Characters from the current macro definition are used in place of
characters (commands and/or text) from the terminal until either the
definition runs out or the expansion is terminated early by one of
the conditions listed above.  However, the answer to any Yes or No
question is still read from the terminal, with subsequent characters
again taken from the macro definition provided the answer to the
question is Yes.  If ⊗Y is typed from within the line editor, then
the line is reloaded into the line editor with the cursor at the same
place it was when the ⊗Y was given and then expansion of the macro
begins.  Note that if the first command from the macro definition is
a search, it will start from the position following that from which
the ⊗Y command was given in the line.

When macro expansion is terminated for any reason, an ALTMODE
character is used as the next input character to force completion of
any partially-typed command.  However, there is one major exception
to this rule, namely:
   If the macro expansion runs to completion and the effect of
   the last characters in the macro is to leave a line of text
   (from the file) in the line editor, then the normally-inserted
   ALTMODE is omitted and the text is left in the line editor. 
Because of the ALTMODE-insertion rule, if a macro definition ends
with a partially typed command, that command will be aborted by the
ALTMODE. 

	⊗7⊗Y
Characters are read from the macro definition instead of from the
terminal until the definition has run out 7 times or early
termination is forced by one of the afore-mentioned conditions. 

	⊗0⊗Y
The current macro definition is typed out, using the α and β
characters to represent the display-keyboard CONTROL and META bits,
respectively. 
ETV files extended by other programs.

ETV can handle easily almost any file that has been extended by
another program even though the directory has not been updated by
that program.  The single restriction is that the file must remain in
correct ETV format with Formfeeds occurring only as the first
character in a record.  When ETV encounters a file that is longer
than the directory indicates, the file is read from the last
indicated page to the end of the file to make sure that the file is
properly formatted.  If the file is formatted ok, then ETV generates
in core an updated version of the directory, including directory
lines for any new pages added to the file.  The updated directory is
normally not written out onto the disk until some command forces one
or more other pages to be written on the disk.  However, the ⊗XUPDATE
command immediately writes out the updated directory, if any.  As
long as the updated directory remains not written out on the disk, a
"U" (for update) is displayed on the top line of the screen.  The
first time any page is changed and written out, or when the ⊗XUPDATE
command is given, the updated directory will be written out and the
"U" will disappear.

When ETV opens a file that has been properly extended in the above
manner, it reports the number of pages that have been added to the
file, or, if none, the number of records by which the last page has
been extended.  Also, if any pages have been added, the default
position within the file (at which ETV will place you if you gave no
specific page number in a /#P switch) is the first newly added page.

MAIL and RCV extend ETV files in this way.